/*
一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市（假设出发时油箱是空的）给定两个城市之间的距离 D1汽车油箱的容量C（以升为单位）、每升汽油能行驶的距离 D2、出发点每升汽油价格P和沿途油站数 N（N 可以为零），油站 i 离出发点的距离 D 
i
​
 、每升汽油价格 P 
i
​
 （i=1,2,…,N）。计算结果四舍五入至小数点后两位。如果无法到达目的地，则输出 No Solution。

输入格式
第一行，D 
1
​
 ，C，D 
2
​
 ，P，N。

接下来有 N 行。

第 i+1 行，两个数字，油站 i 离出发点的距离 D 
i
​
  和每升汽油价格 P 
i
​
 。

输出格式
所需最小费用，计算结果四舍五入至小数点后两位。如果无法到达目的地，则输出 No Solution。

输入输出样例
输入 #1复制

275.6 11.9 27.4 2.8 2
102.0 2.9
220.0 2.2
输出 #1复制

26.95
说明/提示
N≤6，其余数字 ≤500。

NOIP1999 普及组第三题、提高组第三题
*/
#include<bits/stdc++.h>
#define endl "\n";
#define ll long long
#define all(rq) rq.begin(),rq.end()

using namespace std;
const int INF=0x3f3f3f3f;

class node{
public:
	double dis,p;
	
	node(double dis,double p):dis(dis),p(p){
	}
	
	node(){
	}
	
	bool operator<(const node& other) const{ //按到起点距离进行排序
		return dis<other.dis;
	}
};


int main(){
	double d1,c,d2,p;
	int n;
	cin>>d1>>c>>d2>>p>>n;
	
	vector<node> s(n+2);
	s[0]=node(0,p); //将第一个元素名为起点
	for(int i=1;i<=n;i++){ //输入各加油站的油费和到起点的距离
		double di,pi;
		cin>>di>>pi;

		s[i]=node(di,pi);
	} 

	s[n+1]=node(d1,0); //第n+2设为终点
	for(int i=1;i<=n+1;i++){ //判断各加油站之间可不可以到达
		if(s[i].dis-s[i-1].dis>c*d2){
			cout<<"No Solution"<<endl;
			return 0;
		}
	}
	
	sort(all(s)); //按到起点距离升序排列
	
	int now=0; //当前在第几个加油站
	double curr=0; //当前所花油费
	double gas=0; //当前剩余油量
	while(now!=n+1){
		
		int next=now+1;
		bool flag=false; //判断当前加油站是否有可以到达的比当前加油站油费便宜的加油站
		
		double need=0;
		for(int i=now+1;i<=n+1;i++){
			if(s[i].dis-s[now].dis<c*d2&&s[i].p<s[now].p){
				next=i;
				flag=true;
				break;
			}
		}
		
		if(flag){ //若有
			double dis=s[next].dis-s[now].dis;
			need=dis/d2;
			
			if(need>gas){ //若当前需要的油量比现存油量多
				need-=gas; //那么真实所需要的油量为need-gas
				gas=0;
			}else{
				gas-=need; //否则真实需要为0
				need=0;
			}
		}else{ //若没有比当前油站更便宜的加油站 则在加满油后选择可以到达的最便宜的加油站
			for(int i=now+1;i<=n+1;i++){ 
				if(s[i].dis-s[now].dis<=c*d2&&s[i].p<s[next].p){
					next=i;
				}
			}
			
			double dis=s[next].dis-s[now].dis;
			need=c-gas;
			
			gas=c-dis/d2;
		}
		
		curr+=need*s[now].p;
		now=next;
	} 
	
	cout<<fixed<<setprecision(2)<<curr<<endl;
	return 0;
}